home *** CD-ROM | disk | FTP | other *** search
/ Macwelt 1 / Macwelt DVD 1.toast / Software für Mac-OS X / Entwickler-Tools / netbeans / modules / ext / djava.jar / koala / dynamicjava / interpreter / InterpreterUtilities.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-03-14  |  12.5 KB  |  308 lines

  1. package koala.dynamicjava.interpreter;
  2.  
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Method;
  5. import java.lang.reflect.Modifier;
  6. import koala.dynamicjava.util.AmbiguousFieldException;
  7. import koala.dynamicjava.util.ReflectionUtilities;
  8.  
  9. public class InterpreterUtilities {
  10.    public static final Byte ONE = new Byte((byte)1);
  11.    // $FF: synthetic field
  12.    private static Class class$Ljava$lang$String;
  13.    // $FF: synthetic field
  14.    private static Class class$Ljava$lang$Boolean;
  15.    // $FF: synthetic field
  16.    private static Class class$Ljava$lang$Byte;
  17.    // $FF: synthetic field
  18.    private static Class class$Ljava$lang$Integer;
  19.    // $FF: synthetic field
  20.    private static Class class$Ljava$lang$Character;
  21.    // $FF: synthetic field
  22.    private static Class class$Ljava$lang$Short;
  23.    // $FF: synthetic field
  24.    private static Class class$Ljava$lang$Long;
  25.    // $FF: synthetic field
  26.    private static Class class$Ljava$lang$Float;
  27.    // $FF: synthetic field
  28.    private static Class class$Ljava$lang$Double;
  29.  
  30.    public static Object equalTo(Class var0, Class var1, Object var2, Object var3) {
  31.       return equalityOperation(var0, var1, var2, var3, koala.dynamicjava.interpreter.InterpreterUtilities.EqualToPredicate.INSTANCE);
  32.    }
  33.  
  34.    public static Object notEqualTo(Class var0, Class var1, Object var2, Object var3) {
  35.       return equalityOperation(var0, var1, var2, var3, koala.dynamicjava.interpreter.InterpreterUtilities.NotEqualToPredicate.INSTANCE);
  36.    }
  37.  
  38.    protected static Object equalityOperation(Class var0, Class var1, Object var2, Object var3, BinaryPredicate var4) {
  39.       if (var0.isPrimitive()) {
  40.          if (var0 == Boolean.TYPE) {
  41.             return var4.invoke((Boolean)var2, (Boolean)var3) ? Boolean.TRUE : Boolean.FALSE;
  42.          } else {
  43.             if (var0 == Character.TYPE) {
  44.                var2 = new Integer((Character)var2);
  45.             }
  46.  
  47.             if (var1 == Character.TYPE) {
  48.                var3 = new Integer((Character)var3);
  49.             }
  50.  
  51.             return var4.invoke(((Number)var2).doubleValue(), ((Number)var3).doubleValue()) ? Boolean.TRUE : Boolean.FALSE;
  52.          }
  53.       } else {
  54.          return var4.invoke(var2, var3) ? Boolean.TRUE : Boolean.FALSE;
  55.       }
  56.    }
  57.  
  58.    public static Object add(Class var0, Object var1, Object var2) {
  59.       return var0 == (class$Ljava$lang$String != null ? class$Ljava$lang$String : (class$Ljava$lang$String = class$("java.lang.String"))) ? "" + var1 + var2 : binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.AddOperation.INSTANCE);
  60.    }
  61.  
  62.    public static Object subtract(Class var0, Object var1, Object var2) {
  63.       return binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.SubtractOperation.INSTANCE);
  64.    }
  65.  
  66.    public static Object multiply(Class var0, Object var1, Object var2) {
  67.       return binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.MultiplyOperation.INSTANCE);
  68.    }
  69.  
  70.    public static Object divide(Class var0, Object var1, Object var2) {
  71.       return binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.DivideOperation.INSTANCE);
  72.    }
  73.  
  74.    public static Object remainder(Class var0, Object var1, Object var2) {
  75.       return binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.RemainderOperation.INSTANCE);
  76.    }
  77.  
  78.    protected static Object binaryArithmeticOperation(Class var0, Object var1, Object var2, BinaryArithmeticOperation var3) {
  79.       if (var1 instanceof Character) {
  80.          var1 = new Integer((Character)var1);
  81.       }
  82.  
  83.       if (var2 instanceof Character) {
  84.          var2 = new Integer((Character)var2);
  85.       }
  86.  
  87.       if (var0 == Integer.TYPE) {
  88.          return new Integer(var3.invoke(((Number)var1).intValue(), ((Number)var2).intValue()));
  89.       } else if (var0 == Long.TYPE) {
  90.          return new Long(var3.invoke(((Number)var1).longValue(), ((Number)var2).longValue()));
  91.       } else {
  92.          return var0 == Float.TYPE ? new Float(var3.invoke(((Number)var1).floatValue(), ((Number)var2).floatValue())) : new Double(var3.invoke(((Number)var1).doubleValue(), ((Number)var2).doubleValue()));
  93.       }
  94.    }
  95.  
  96.    public static Object lessThan(Object var0, Object var1) {
  97.       return relationalOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.LessThanOperation.INSTANCE);
  98.    }
  99.  
  100.    public static Object lessOrEqual(Object var0, Object var1) {
  101.       return relationalOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.LessOrEqualOperation.INSTANCE);
  102.    }
  103.  
  104.    public static Object greaterThan(Object var0, Object var1) {
  105.       return relationalOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.GreaterThanOperation.INSTANCE);
  106.    }
  107.  
  108.    public static Object greaterOrEqual(Object var0, Object var1) {
  109.       return relationalOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.GreaterOrEqualOperation.INSTANCE);
  110.    }
  111.  
  112.    protected static Object relationalOperation(Object var0, Object var1, RelationalOperation var2) {
  113.       if (var0 instanceof Character) {
  114.          var0 = new Integer((Character)var0);
  115.       }
  116.  
  117.       if (var1 instanceof Character) {
  118.          var1 = new Integer((Character)var1);
  119.       }
  120.  
  121.       return var2.invoke(((Number)var0).doubleValue(), ((Number)var1).doubleValue()) ? Boolean.TRUE : Boolean.FALSE;
  122.    }
  123.  
  124.    public static Object bitAnd(Class var0, Object var1, Object var2) {
  125.       return bitwiseOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.BitAndOperation.INSTANCE);
  126.    }
  127.  
  128.    public static Object xOr(Class var0, Object var1, Object var2) {
  129.       return bitwiseOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.XOrOperation.INSTANCE);
  130.    }
  131.  
  132.    public static Object bitOr(Class var0, Object var1, Object var2) {
  133.       return bitwiseOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.BitOrOperation.INSTANCE);
  134.    }
  135.  
  136.    protected static Object bitwiseOperation(Class var0, Object var1, Object var2, BitwiseOperation var3) {
  137.       if (var0 == Boolean.TYPE) {
  138.          return new Boolean(var3.invoke((Boolean)var1, (Boolean)var2));
  139.       } else {
  140.          if (var1 instanceof Character) {
  141.             var1 = new Integer((Character)var1);
  142.          }
  143.  
  144.          if (var2 instanceof Character) {
  145.             var2 = new Integer((Character)var2);
  146.          }
  147.  
  148.          return var0 == Integer.TYPE ? new Integer(var3.invoke(((Number)var1).intValue(), ((Number)var2).intValue())) : new Long(var3.invoke(((Number)var1).longValue(), ((Number)var2).longValue()));
  149.       }
  150.    }
  151.  
  152.    public static Object shiftLeft(Class var0, Object var1, Object var2) {
  153.       return shiftOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.ShiftLeftOperation.INSTANCE);
  154.    }
  155.  
  156.    public static Object shiftRight(Class var0, Object var1, Object var2) {
  157.       return shiftOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.ShiftRightOperation.INSTANCE);
  158.    }
  159.  
  160.    public static Object unsignedShiftRight(Class var0, Object var1, Object var2) {
  161.       return shiftOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.UnsignedShiftRightOperation.INSTANCE);
  162.    }
  163.  
  164.    protected static Object shiftOperation(Class var0, Object var1, Object var2, ShiftOperation var3) {
  165.       if (var1 instanceof Character) {
  166.          var1 = new Integer((Character)var1);
  167.       }
  168.  
  169.       if (var2 instanceof Character) {
  170.          var2 = new Integer((Character)var2);
  171.       }
  172.  
  173.       return var0 == Integer.TYPE ? new Integer(var3.invoke(((Number)var1).intValue(), ((Number)var2).intValue())) : new Long(var3.invoke(((Number)var1).longValue(), ((Number)var2).intValue()));
  174.    }
  175.  
  176.    public static Object plus(Class var0, Object var1) {
  177.       return unaryOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.PlusOperation.INSTANCE);
  178.    }
  179.  
  180.    public static Object minus(Class var0, Object var1) {
  181.       return unaryOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.MinusOperation.INSTANCE);
  182.    }
  183.  
  184.    public static Object unaryOperation(Class var0, Object var1, UnaryOperation var2) {
  185.       if (var1 instanceof Character) {
  186.          var1 = new Integer((Character)var1);
  187.       }
  188.  
  189.       if (var0 == Integer.TYPE) {
  190.          return new Integer(var2.invoke(((Number)var1).intValue()));
  191.       } else if (var0 == Long.TYPE) {
  192.          return new Long(var2.invoke(((Number)var1).longValue()));
  193.       } else {
  194.          return var0 == Float.TYPE ? new Float(var2.invoke(((Number)var1).floatValue())) : new Double(var2.invoke(((Number)var1).doubleValue()));
  195.       }
  196.    }
  197.  
  198.    public static Class getDeclaringClass(Class var0) {
  199.       Class var1 = var0.getDeclaringClass();
  200.       if (var1 == null) {
  201.          try {
  202.             Field var2 = var0.getField("declaring$Class$Reference$0");
  203.             var1 = (Class)var2.get((Object)null);
  204.          } catch (Exception var3) {
  205.          }
  206.       }
  207.  
  208.       return var1;
  209.    }
  210.  
  211.    public static Field getOuterField(Class var0, String var1) throws NoSuchFieldException, AmbiguousFieldException {
  212.       boolean var2 = Modifier.isStatic(var0.getModifiers());
  213.  
  214.       for(Class var3 = var0 != null ? getDeclaringClass(var0) : null; var3 != null; var3 = getDeclaringClass(var3)) {
  215.          try {
  216.             Field var4 = ReflectionUtilities.getField(var3, var1);
  217.             if (!var2 || Modifier.isStatic(var4.getModifiers())) {
  218.                return var4;
  219.             }
  220.          } catch (NoSuchFieldException var5) {
  221.          }
  222.  
  223.          var2 |= Modifier.isStatic(var3.getModifiers());
  224.       }
  225.  
  226.       throw new NoSuchFieldException(var1);
  227.    }
  228.  
  229.    public static Method lookupOuterMethod(Class var0, String var1, Class[] var2) throws NoSuchMethodException {
  230.       boolean var3 = Modifier.isStatic(var0.getModifiers());
  231.  
  232.       for(Class var4 = var0 != null ? getDeclaringClass(var0) : null; var4 != null; var4 = getDeclaringClass(var4)) {
  233.          try {
  234.             Method var5 = ReflectionUtilities.lookupMethod(var4, var1, var2);
  235.             if (!var3 || Modifier.isStatic(var5.getModifiers())) {
  236.                return var5;
  237.             }
  238.          } catch (NoSuchMethodException var6) {
  239.          }
  240.  
  241.          var3 |= Modifier.isStatic(var4.getModifiers());
  242.       }
  243.  
  244.       throw new NoSuchMethodException(var1);
  245.    }
  246.  
  247.    public static boolean isValidAssignment(Class var0, Object var1) {
  248.       Class var2 = var1 == null ? null : var1.getClass();
  249.       if (var0 != null) {
  250.          if (var0.isPrimitive()) {
  251.             if (var0 == Boolean.TYPE && var2 != (class$Ljava$lang$Boolean != null ? class$Ljava$lang$Boolean : (class$Ljava$lang$Boolean = class$("java.lang.Boolean")))) {
  252.                return false;
  253.             }
  254.  
  255.             if (var0 == Byte.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte")))) {
  256.                if (var2 == (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer")))) {
  257.                   Number var4 = (Number)var1;
  258.                   return var4.intValue() == var4.byteValue();
  259.                }
  260.  
  261.                return false;
  262.             }
  263.  
  264.             if ((var0 == Short.TYPE || var2 == (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character")))) && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character")))) {
  265.                if (var2 == (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer")))) {
  266.                   Number var3 = (Number)var1;
  267.                   return var3.intValue() == var3.shortValue();
  268.                }
  269.  
  270.                return false;
  271.             }
  272.  
  273.             if (var0 == Integer.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character"))) && var2 != (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer")))) {
  274.                return false;
  275.             }
  276.  
  277.             if (var0 == Long.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character"))) && var2 != (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer"))) && var2 != (class$Ljava$lang$Long != null ? class$Ljava$lang$Long : (class$Ljava$lang$Long = class$("java.lang.Long")))) {
  278.                return false;
  279.             }
  280.  
  281.             if (var0 == Float.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character"))) && var2 != (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer"))) && var2 != (class$Ljava$lang$Long != null ? class$Ljava$lang$Long : (class$Ljava$lang$Long = class$("java.lang.Long"))) && var2 != (class$Ljava$lang$Float != null ? class$Ljava$lang$Float : (class$Ljava$lang$Float = class$("java.lang.Float")))) {
  282.                return false;
  283.             }
  284.  
  285.             if (var0 == Double.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character"))) && var2 != (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer"))) && var2 != (class$Ljava$lang$Long != null ? class$Ljava$lang$Long : (class$Ljava$lang$Long = class$("java.lang.Long"))) && var2 != (class$Ljava$lang$Float != null ? class$Ljava$lang$Float : (class$Ljava$lang$Float = class$("java.lang.Float"))) && var2 != (class$Ljava$lang$Double != null ? class$Ljava$lang$Double : (class$Ljava$lang$Double = class$("java.lang.Double")))) {
  286.                return false;
  287.             }
  288.          } else if (var2 != null && !var0.isAssignableFrom(var2) && !var2.isAssignableFrom(var0)) {
  289.             return false;
  290.          }
  291.       }
  292.  
  293.       return true;
  294.    }
  295.  
  296.    // $FF: synthetic method
  297.    static Class class$(String var0) {
  298.       try {
  299.          return Class.forName(var0);
  300.       } catch (ClassNotFoundException var2) {
  301.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  302.       }
  303.    }
  304.  
  305.    protected InterpreterUtilities() {
  306.    }
  307. }
  308.